package com.boilerCloud.service.sys.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.boilerCloud.dao.sys.IHzlqswMenuDao;
import com.boilerCloud.dao.sys.IHzlqswRoleDao;
import com.boilerCloud.dto.HzlqswCacheContent;
import com.boilerCloud.dto.HzlqswPage;
import com.boilerCloud.dto.sys.Role;
import com.boilerCloud.service.sys.IHzlqswRoleService;

/**
 * @类功能说明：角色管理业务类
 * @类修改者：
 * @修改日期：
 * @修改说明：
 * @公司名称：杭州龙骞科技有限公司
 * @作者：miaochao
 * @创建时间：2013-7-24
 * @版本：V1.0
 */
@Service
public class HzlqswRoleServiceImpl implements IHzlqswRoleService {
	@Resource
	private IHzlqswRoleDao roleDao;
	@Resource
	private IHzlqswMenuDao menuDao;

	
	@Override
	public void qryRoleList(Role role, HzlqswPage<Role> page) throws Exception {
		int totalNum = roleDao.qryRoleListSize(role);
		if(totalNum > 0){
			// 查询分页信息
			int length = page.getPageSize();
			int offset = (page.getCurPage() - 1) * length;
			List<Role> list = roleDao.qryRoleList(offset, length, role);
			Role role_str;
			int size = list.size();
			for (int i = 0;i < size; i++) {
				role_str = list.get(i);
				role_str.setMenuIDs(roleDao.getMenuIDByRole(role_str.getID()));
				//_roles.add(role_str);
			}
			// 设置分页信息（集合和记录总数）
			page.setPageList(list);
			page.setTotalNum(totalNum);
		}
		
	}

	/**
	 * @函数功能说明:添加角色
	 * @创建者：qianfuqiang 2013-8-13
	 * @修改者：
	 * @修改内容：
	 * @参数： @param role
	 * @参数： @throws Exception
	 * @返回： void
	 * @抛出异常：
	 */
	@Transactional(rollbackFor = { Exception.class }, propagation = Propagation.REQUIRED)
	public void addRole(Role role) throws Exception {
		// 添加角色
		int id = roleDao.addRole(role);
		role.setID(id);
		// 添加角色菜单表
		roleDao.addRoleMenu(id, role.getMenuIDs());
		// 更新缓存
		// 获取用户菜单权限
		String[] menuUrls = menuDao.getMenuUrlByRole(role.getID());
		// 将权限放入缓存
		HzlqswCacheContent.roleMenuUrls.put(role.getID(), menuUrls);
	}

	/**
	 * @函数功能说明:修改角色信息
	 * @创建者：qianfuqiang 2013-8-14
	 * @修改者：
	 * @修改内容：
	 * @参数： @param role
	 * @参数： @param viewmenuid
	 * @参数： @throws Exception
	 * @返回： void
	 * @抛出异常：
	 */
	@Transactional(rollbackFor = { Exception.class }, propagation = Propagation.REQUIRED)
	public void updateRole(Role role, String viewmenuid) throws Exception {
		// 修改角色表
		roleDao.updateRole(role);
		// 删除角色下菜单权限数据-按照给定范围集合删除
		roleDao.delRoleMenu(role.getID(), viewmenuid);
		// 添加角色新菜单权限数据
		roleDao.addRoleMenu(role.getID(), role.getMenuIDs());
		// 更新缓存
		// 获取用户菜单权限
		String[] menuUrls = menuDao.getMenuUrlByRole(role.getID());
		// 将权限放入缓存
		HzlqswCacheContent.roleMenuUrls.put(role.getID(), menuUrls);
	}

	/**
	 * @函数功能说明:刪除角色
	 * @创建者：qianfuqiang 2013-8-14
	 * @修改者：
	 * @修改内容：
	 * @参数： @param roleID
	 * @参数： @throws Exception
	 * @返回： void
	 * @抛出异常：
	 */
	@Transactional(rollbackFor = { Exception.class }, propagation = Propagation.REQUIRED)
	public void delRole(int roleID) throws Exception {
		roleDao.delRole(roleID);
		roleDao.delRoleMenu(roleID);
		// 删除用户角色

	}

	/**
	 * 查询角色列表
	 * 
	 * @return
	 * @throws Exception
	 */
	public List<Role> qryRoles(int or_id) throws Exception {
		return roleDao.qryRoles(or_id);
	}

	
}
